#include"2cache.h"

#define a(k) stoul(argv[k])

int main(int argc, char* argv[]){
    // 定义无符号整数变量，用于存储缓存参数
    unsigned block_size, L1_size, L1_assoc, vic_size, L2_size, L2_assoc;

    // 从命令行参数中获取并转换缓存配置参数
    block_size = stoul(argv[1]);   // 获取块大小
    L1_size = stoul(argv[2]);      // 获取L1缓存大小
    L1_assoc = stoul(argv[3]);     // 获取L1相联度
    vic_size = stoul(argv[4]);     // 获取受害者缓存大小
    L2_size = stoul(argv[5]);      // 获取L2缓存大小
    L2_assoc = stoul(argv[6]);     // 获取L2相联度

    // 获取trace文件的文件名
    string trace_file = string(argv[7]);

    // 如果L2缓存大小不为0，则创建L2缓存对象，否则将L2指针设为空
    Cache* L2 = L2_size ? new Cache(block_size, L2_size, L2_assoc, nullptr, 0, "") : nullptr;

    // 创建L1缓存对象，并启动缓存模拟运行
    Cache(block_size, L1_size, L1_assoc, L2, vic_size, trace_file).Run();

    return 0;
}
